package com.flyqiu.common.sc.statistical;

import com.flyqiu.common.sc.FlyQiuSCContext;

/**
 * FlyQiu基础统计接口，提供对集合数据进行统计的能力
 *
 * @param <T> 泛型参数，表示被统计的数据类型
 */
public interface IFlyQiuStatistical<T> {

    /**
     * 获取需要进行统计的字段名称
     *
     * @return 统计字段的名称
     */
    String getFieldName();

    /**
     * 获取分割符
     *
     * @return 分割符字符串，默认实现返回null
     */
    default String getSplit() {
        return null;
    }

    /**
     * 获取当前的统计值
     *
     * @return 当前统计的结果对象
     */
    Object getStatisticalValue();

    /**
     * 获取统计值字符串
     *
     * @return 当前统计的结果字符串
     */
    default String getStatisticalValueStr() {
        Object statisticalValue = getStatisticalValue();
        if (statisticalValue == null) {
            return null;
        }
        return String.valueOf(statisticalValue);
    }

    /**
     * 重置统计值，用于下一轮统计的准备
     */
    void resetValue();

    /**
     * 根据给定的数据行、索引和集合数据，计算统计值
     *
     * @param context 统计计算上下文
     * @param row     当前数据行，用于统计计算
     */
    void calculate(FlyQiuSCContext<?> context, T row);

}
